package zhongbo.java.fast.order.util;

public class AssertUtil {

    /**
     * 执行给定的Executable，并检查是否抛出了期望的异常类型。
     *
     * @param expectedType 期望的异常类型
     * @param executable   要执行的代码块
     * @throws AssertionError 如果没有抛出期望的异常，或者抛出了不同类型的异常
     */
    public static void assertThrows(Class<? extends Throwable> expectedType, Runnable executable) throws AssertionError {
        try {
            executable.run();
        } catch (Throwable actualException) {
            if (expectedType.isInstance(actualException)) {
                // 异常类型匹配，测试通过
                return;
            } else {
                // 抛出了不同类型的异常
                throw new AssertionError("预期的异常类型 " + expectedType.getName() + " 但是得到了 " + actualException.getClass().getName());
            }
        }
        // 没有抛出异常
        throw new AssertionError("预期的异常类型 " + expectedType.getName() + " 但没有引发异常");
    }
}

// 使用示例
//public class TestExample {
//    public static void main(String[] args) {
//        // 测试代码
//        try {
//            AssertUtil.assertThrows(BusinessException.class, () -> {
//                // 假设这个方法可能会抛出BusinessException
//                throw new BusinessException("Error occurred");
//            });
//            System.out.println("Test passed: BusinessException was thrown as expected.");
//        } catch (AssertionError e) {
//            System.err.println("Test failed: " + e.getMessage());
//        }
//    }
//}

// 假设的BusinessException类
//class BusinessException extends Exception {
//    public BusinessException(String message) {
//        super(message);
//    }
//}